#include <iostream>
#include <vector>
using namespace std;

int GetMax(int x, int y)
{
    return (x > y) ? (x) : (y);
}

int main() {
    int n = 0;
    cin >> n;
    vector<int> v;
    v.resize(n);

    int i = 0;
    for(i = 0; i < n; i++)
    {
        cin >> v[i];
    }

    // 下面是动态规划写法
    int max = v[0];
    int sum = v[0];
    for(i = 1; i < v.size(); i++)
    {
        sum = GetMax(sum + v[i], v[i]);
        if(sum > max)
        {
            max = sum;
        }
    }




    // 下面这种解法是我自己写的，时间复杂度太高了
    // int max = v[0];
    // for(i = 0; i < v.size(); i++)
    // {
    //     int tmp = v[i];
    //     if(tmp > max)
    //     {
    //         max = tmp;
    //     }
    //     int j = 0;
    //     for(j = i + 1; j < v.size(); j++)
    //     {
    //         tmp += v[j];
    //         if(tmp > max)
    //         {
    //             max = tmp;
    //         }
    //     }
    // }

    cout << max << endl;

    return 0;
}